home *** CD-ROM | disk | FTP | other *** search
/ Nebula 2 / Nebula Two.iso / SourceCode / Palettes / TTools / TToolsPalette / TBinderList.subproj / SelectorBrowsingFunctions.m < prev    next >
Encoding:
Text File  |  1995-06-12  |  1.7 KB  |  80 lines

  1. /* SelectorBrowsingFunctions.m
  2.  * Written By:  Thomas Burkholder
  3.  *
  4.  * You may freely copy, distribute, and reuse the code in this example.
  5.  * NeXT disclaims any warranty of any kind, expressed or  implied, as to its
  6.  * fitness for any particular use.
  7.  */
  8.  
  9. #import <ctype.h>
  10. #import "SelectorBrowsingFunctions.h"
  11. #import "../Utilities.subproj/SortedStorage.h"
  12.  
  13. int argumentsFor(SEL aSelector)
  14. {
  15.     // would really like to use method_getNumberOfArguments...
  16.     // however, need a class to do that.  So, we do it the ugly way...
  17.  
  18.     const char *selName = sel_getName(aSelector);
  19.     int i, args = 0, n = strlen(selName);
  20.  
  21.     for(i=0;(i<n);i++) {
  22.         if (selName[i] == ':') args++;
  23.     }
  24.     return args;
  25. }
  26.  
  27. int hasOneArgument(id src, SEL aSelector)
  28. {
  29.     return (1 == argumentsFor(aSelector));
  30. }
  31.  
  32. int hasNoArguments(id src, SEL aSelector)
  33. {
  34.     return (0 == argumentsFor(aSelector));
  35. }
  36.  
  37. int isAccessor(id src, SEL aSelector)
  38. {
  39.     return ([src instancesRespondTo:modifierFor(aSelector)]);
  40. }
  41.  
  42. int isModifier(id src, SEL aSelector)
  43. {
  44.     return ([src instancesRespondTo:accessorFor(aSelector)]);
  45. }
  46.  
  47. SEL modifierFor(SEL aSelector)
  48. {
  49.     const char *str;
  50.     static char *buf;
  51.  
  52.     if (0!=argumentsFor(aSelector))
  53.         return 0;
  54.     str = sel_getName(aSelector);
  55.     if (buf) NX_FREE(buf);
  56.     NX_MALLOC(buf,char,strlen(str)+6);
  57.     sprintf(buf,"set%s:",str);
  58.     if (islower(buf[3]))
  59.         buf[3] = toupper(buf[3]);
  60.     return sel_getUid(buf);
  61. }
  62.  
  63. SEL accessorFor(SEL aSelector)
  64. {
  65.     const char *str;
  66.     static char *buf;
  67.  
  68.     if (1!=argumentsFor(aSelector))
  69.         return 0;
  70.     str = sel_getName(aSelector);
  71.     if (strncmp(str,"set",3))
  72.         return 0;
  73.     if (buf) NX_FREE(buf);
  74.     buf = NXCopyStringBuffer(&(str[3]));
  75.     if (isupper(buf[0]))
  76.         buf[0] = tolower(buf[0]);
  77.     buf[strlen(buf)-1] = '\0';
  78.     return sel_getUid(buf);
  79. }
  80.